﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using EntitiesLayer;
using System.ServiceProcess;
using System.Diagnostics;

namespace BatchImporterConfigurator
{
    public partial class BatchImporterConfigurator : Form
    {
        private System.Configuration.Configuration configDB;
        private System.Configuration.Configuration configIIF;
        private System.Configuration.Configuration configCleaner;
        private BatchImporter_Fields tareasCampos;
        private static int milisecTO = 10000;

        public BatchImporterConfigurator()
        {
            try
            {
                if (!RevisarExistenciaArchivos())
                {
                    MessageBox.Show("El configurador no encontró los archivos de configuración.", "Error al Iniciar", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    System.Environment.Exit(0);
                }
                InitializeComponent();
                CargarInformacionBD();
                CargarInformacionIIF();
                CargarInformacionCleaner();
                CargarArchivoParametros();
                CargarTareasListBox();
                CargarEstadoServicios();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Se produjo el siguiente error: '" + ex.Message + "'.", "Error al Iniciar", MessageBoxButtons.OK, MessageBoxIcon.Error);
                System.Environment.Exit(0);
            }
            
        }

        private void CargarEstadoServicios()
        {
                ServiceController windowsService = new ServiceController("Unisys Batch Importer To DB");
                if (windowsService.Status == ServiceControllerStatus.Running)
                {
                    textBox1.BackColor = Color.Green;
                    textBox1.Text = "Iniciado";
                    button1.Text = "Detener";
                }
                else
                {
                    textBox1.BackColor = Color.Red;
                    textBox1.Text = "Detenido";
                    button1.Text = "Iniciar";
                }

                windowsService = new ServiceController("Unisys Batch Importer To IIF");
                if (windowsService.Status == ServiceControllerStatus.Running)
                {
                    textBox27.BackColor = Color.Green;
                    textBox27.Text = "Iniciado";
                    button10.Text = "Detener";
                }
                else
                {
                    textBox27.BackColor = Color.Red;
                    textBox27.Text = "Detenido";
                    button10.Text = "Iniciar";
                }

                windowsService = new ServiceController("Unisys Batch Importer Cleaner");
                if (windowsService.Status == ServiceControllerStatus.Running)
                {
                    textBox2.BackColor = Color.Green;
                    textBox2.Text = "Iniciado";
                    button2.Text = "Detener";
                }
                else
                {
                    textBox2.BackColor = Color.Red;
                    textBox2.Text = "Detenido";
                    button2.Text = "Iniciar";
                }
        }

        private bool RevisarExistenciaArchivos()
        {
            if (System.IO.File.Exists("BatchImporterServiceToDB.exe.config") &&
                System.IO.File.Exists("BatchImporterServiceToIIF.exe.config") &&
                System.IO.File.Exists("BatchImporterService_Cleaner.exe.config"))
                return true;
            
            return false;
        }

        private void CargarInformacionBD()
        {
            configDB = System.Configuration.ConfigurationManager.OpenExeConfiguration("BatchImporterServiceToDB.exe");

            textBox4.Text = configDB.AppSettings.Settings["identificacionSistema"].Value;
            textBox5.Text = configDB.AppSettings.Settings["tamanoMaximoBytesLogs"].Value;
            textBox6.Text = configDB.AppSettings.Settings["minutosRetrasoEjecucion"].Value;
            textBox7.Text = configDB.AppSettings.Settings["numeroReintentos"].Value; 
            textBox8.Text = configDB.AppSettings.Settings["categoriasSinImagenes"].Value;
            textBox11.Text = configDB.AppSettings.Settings["cadenaConexionBDData"].Value;
            textBox16.Text = configDB.AppSettings.Settings["campoCategoria"].Value;
            textBox17.Text = configDB.AppSettings.Settings["campoFecha"].Value;
            textBox18.Text = configDB.AppSettings.Settings["campoDocumento"].Value;
            textBox19.Text = configDB.AppSettings.Settings["campoCliente"].Value;
            textBox20.Text = configDB.AppSettings.Settings["cadenaConexionBDIIF"].Value;

            //Ubicacion Directorios
            textBox21.Text = configDB.AppSettings.Settings["ubicacionLogs"].Value;
            textBox22.Text = configDB.AppSettings.Settings["rutaArchivosData"].Value;
            textBox23.Text = configDB.AppSettings.Settings["rutaImagenes"].Value;
            textBox24.Text = configDB.AppSettings.Settings["rutaArchivosCargados"].Value;
            textBox25.Text = configDB.AppSettings.Settings["rutaArchivosNoCargados"].Value;
            textBox26.Text = configDB.AppSettings.Settings["rutaArchivoParametros"].Value;

            //CheckBoxs
            checkBox8.Checked = Boolean.Parse(configDB.AppSettings.Settings["activarLogsFileSystem"].Value);
            checkBox12.Checked = Boolean.Parse(configDB.AppSettings.Settings["activarMensajesInformacion"].Value);
            checkBox9.Checked = Boolean.Parse(configDB.AppSettings.Settings["activarMensajesError"].Value);
            checkBox10.Checked = Boolean.Parse(configDB.AppSettings.Settings["activarMensajesProceso"].Value);
            checkBox11.Checked = Boolean.Parse(configDB.AppSettings.Settings["activarMensajesLog"].Value);

            //Calendario
            string[] schedule = configDB.AppSettings.Settings["horarioEjecucion"].Value.Split(';');
            string[] days = schedule[0].Split(',');
            textBox9.Text = schedule[1];
            textBox10.Text = schedule[2];

            checkBox1.Checked = false;
            checkBox2.Checked = false;
            checkBox3.Checked = false;
            checkBox4.Checked = false;
            checkBox5.Checked = false;
            checkBox6.Checked = false;
            checkBox7.Checked = false;

            foreach (string day in days)
            {
                switch (day)
                {
                    case "L": checkBox1.Checked = true; break;
                    case "K": checkBox2.Checked = true; break;
                    case "M": checkBox4.Checked = true; break;
                    case "J": checkBox3.Checked = true; break;
                    case "V": checkBox6.Checked = true; break;
                    case "S": checkBox5.Checked = true; break;
                    case "D": checkBox7.Checked = true; break;
                }
            }
            

        }

        private void CargarInformacionIIF()
        {
            configIIF = System.Configuration.ConfigurationManager.OpenExeConfiguration("BatchImporterServiceToIIF.exe");

            textBox50.Text = configIIF.AppSettings.Settings["identificacionSistema"].Value;
            textBox49.Text = configIIF.AppSettings.Settings["tamanoMaximoBytesLogs"].Value;
            textBox48.Text = configIIF.AppSettings.Settings["minutosRetrasoEjecucion"].Value;
            textBox47.Text = configIIF.AppSettings.Settings["numeroReintentos"].Value;
            textBox46.Text = configIIF.AppSettings.Settings["direccionesEmail"].Value;

            textBox43.Text = configIIF.AppSettings.Settings["cadenaConexionBDData"].Value;

            textBox32.Text = configIIF.AppSettings.Settings["usuarioIIF"].Value;
            textBox31.Text = configIIF.AppSettings.Settings["passwordIIF"].Value;
            textBox30.Text = configIIF.AppSettings.Settings["dominioIIF"].Value;
            textBox29.Text = configIIF.AppSettings.Settings["colaEnvioIIF"].Value;
            textBox34.Text = configIIF.AppSettings.Settings["campoCategoria"].Value;
            textBox35.Text = configIIF.AppSettings.Settings["campoNombre"].Value;
            textBox37.Text = configIIF.AppSettings.Settings["campoDescripcion"].Value;
            textBox28.Text = configIIF.AppSettings.Settings["cadenaConexionBDIIF"].Value;
            if (Boolean.Parse(configIIF.AppSettings.Settings["enviarImagenesComoImports"].Value))
            {
                radioButton2.Checked = true;
                radioButton1.Checked = false;
            }
            else
            {
                radioButton2.Checked = false;
                radioButton1.Checked = true;
            }

            //Ubicacion Directorios
            textBox38.Text = configIIF.AppSettings.Settings["ubicacionLogs"].Value;
            textBox36.Text = configIIF.AppSettings.Settings["rutaImagenes"].Value;
            textBox33.Text = configIIF.AppSettings.Settings["rutaArchivoParametros"].Value;

            //CheckBoxs
            checkBox17.Checked = Boolean.Parse(configIIF.AppSettings.Settings["activarLogsFileSystem"].Value);
            checkBox13.Checked = Boolean.Parse(configIIF.AppSettings.Settings["activarMensajesInformacion"].Value);
            checkBox16.Checked = Boolean.Parse(configIIF.AppSettings.Settings["activarMensajesError"].Value);
            checkBox15.Checked = Boolean.Parse(configIIF.AppSettings.Settings["activarMensajesProceso"].Value);
            checkBox14.Checked = Boolean.Parse(configIIF.AppSettings.Settings["activarMensajesLog"].Value);

            //Impersonalizacion Usuario
            checkBox34.Checked = Boolean.Parse(configIIF.AppSettings.Settings["activarImpersonalizacionUsuarioIIF"].Value);
            textBox12.Text = configIIF.AppSettings.Settings["dominioWindows"].Value;

            //Calendario
            string[] schedule = configIIF.AppSettings.Settings["horarioEjecucion"].Value.Split(';');
            string[] days = schedule[0].Split(',');
            textBox45.Text = schedule[1];
            textBox44.Text = schedule[2];

            checkBox24.Checked = false;
            checkBox23.Checked = false;
            checkBox22.Checked = false;
            checkBox21.Checked = false;
            checkBox20.Checked = false;
            checkBox19.Checked = false;
            checkBox18.Checked = false;

            foreach (string day in days)
            {
                switch (day)
                {
                    case "L": checkBox24.Checked = true; break;
                    case "K": checkBox23.Checked = true; break;
                    case "M": checkBox22.Checked = true; break;
                    case "J": checkBox21.Checked = true; break;
                    case "V": checkBox20.Checked = true; break;
                    case "S": checkBox19.Checked = true; break;
                    case "D": checkBox18.Checked = true; break;
                }
            }
        }

        private void CargarInformacionCleaner()
        {
            configCleaner = System.Configuration.ConfigurationManager.OpenExeConfiguration("BatchImporterService_Cleaner.exe");

            textBox73.Text = configCleaner.AppSettings.Settings["identificacionSistema"].Value;
            textBox72.Text = configCleaner.AppSettings.Settings["tamanoMaximoBytesLogs"].Value;
            textBox71.Text = configCleaner.AppSettings.Settings["diasValidezDatosImagenes"].Value;
            checkBox30.Checked = Boolean.Parse(configCleaner.AppSettings.Settings["eliminarArchivoData"].Value);
            checkBox31.Checked = Boolean.Parse(configCleaner.AppSettings.Settings["eliminarImagenes"].Value);
            checkBox32.Checked = Boolean.Parse(configCleaner.AppSettings.Settings["eliminarDeBaseDatos"].Value);

            textBox66.Text = configCleaner.AppSettings.Settings["cadenaConexionBDData"].Value;

            //Ubicacion Directorios
            textBox61.Text = configCleaner.AppSettings.Settings["ubicacionLogs"].Value;

            //CheckBoxs
            checkBox29.Checked = Boolean.Parse(configCleaner.AppSettings.Settings["activarLogsFileSystem"].Value);
            checkBox25.Checked = Boolean.Parse(configCleaner.AppSettings.Settings["activarMensajesInformacion"].Value);
            checkBox28.Checked = Boolean.Parse(configCleaner.AppSettings.Settings["activarMensajesError"].Value);
            checkBox27.Checked = Boolean.Parse(configCleaner.AppSettings.Settings["activarMensajesProceso"].Value);
            checkBox26.Checked = Boolean.Parse(configCleaner.AppSettings.Settings["activarMensajesLog"].Value);
        }

        private void CargarArchivoParametros()
        {
            //System.Diagnostics.Debugger.Launch();
            textBox3.Text = textBox33.Text;
            try
            {
                tareasCampos = BatchImporter_Fields.Deserializar<BatchImporter_Fields>(textBox33.Text);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Archivo de Parámetros, error: "+ex.Message, "Error en Archivo de Parámetros", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void LimpiarCamposListBoxs()
        {
            listBox1.DataSource = null;
            listBox2.DataSource = null;
            textBox51.Clear();
            textBox52.Clear();
            textBox53.Clear();
            textBox54.Clear();
            textBox55.Clear();
            textBox56.Clear();
            textBox67.Clear();
            textBox64.Clear();
            textBox57.Clear();
            textBox59.Clear();
            textBox58.Clear();
            textBox60.Clear();
            checkBox33.Checked = false;
        }

        private void CargarTareasListBox()
        {
            try
            {
                if (tareasCampos.camaras.Count > 0)
                {
                    listBox1.DataSource = tareasCampos.camaras;
                    listBox1.ValueMember = "movTarea";
                    listBox1.DisplayMember = "movTarea";
                }
                else
                {
                    LimpiarCamposListBoxs();
                }
            }
            catch
            {
                LimpiarCamposListBoxs();
            }
        }

        private void CargarCamposListBox(List<Field> fieldsL)
        {
           // listBox2.Items.Clear();
            listBox2.DataSource = fieldsL;
            listBox2.ValueMember = "nombreIIF";
            listBox2.DisplayMember = "nombreIIF";
        }
        
        private void button19_Click(object sender, EventArgs e)
        {
            InsertarEditarTareas(1, button19, button14);
        }

        /// <summary>
        /// Insertar o Edita Tareas
        /// </summary>
        /// <param name="tipo">0=Insertar, 1=Editar</param>
        /// <param name="nombreBoton">Nombre Botón</param>
        private void InsertarEditarTareas(int tipo, Button nombreBoton, Button nombreBotonSec)
        {

            if (nombreBoton.Text.Equals("Aceptar"))
            {
                //Actualizar Datos en la Variable Global
                if (String.IsNullOrEmpty(textBox51.Text.Trim()))
                {
                    MessageBox.Show("El campo 'Nombre de la Tarea' no debe estar vacío.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox51.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox52.Text.Trim()))
                {
                    MessageBox.Show("El campo 'ID de la Tarea' no debe estar vacío.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox52.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox53.Text.Trim()))
                {
                    MessageBox.Show("El campo 'Código Tarea' no debe estar vacío.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox53.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox54.Text.Trim()))
                {
                    MessageBox.Show("El campo 'Clase InfoImage' no debe estar vacío.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox54.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox55.Text.Trim()))
                {
                    MessageBox.Show("El campo 'Descripción' no debe estar vacío.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox55.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox56.Text.Trim()))
                {
                    MessageBox.Show("El campo 'Número de Campos' no debe estar vacío.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox56.Focus();
                    return;
                }

                int intResConv = 0;
                Int32.TryParse(textBox56.Text.Trim(), out intResConv);
                if (intResConv <= 0)
                {
                    MessageBox.Show("El campo 'Número de Campos' debe ser un número entero y mayor a 0.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox56.SelectAll();
                    textBox56.Focus();
                    return;
                }

                if (tipo == 1)
                {
                    tareasCampos.camaras[listBox1.SelectedIndex].nombre = textBox51.Text.Trim();
                    tareasCampos.camaras[listBox1.SelectedIndex].identificador = textBox52.Text.Trim();
                    tareasCampos.camaras[listBox1.SelectedIndex].codigoCheque = textBox53.Text.Trim();
                    tareasCampos.camaras[listBox1.SelectedIndex].claseInfoImage = textBox54.Text.Trim();
                    tareasCampos.camaras[listBox1.SelectedIndex].movTarea = textBox55.Text.Trim();
                    tareasCampos.camaras[listBox1.SelectedIndex].cantidadCampos = Int32.Parse(textBox56.Text.Trim());
                    int posicionLista = listBox1.SelectedIndex;
                    LimpiarCamposListBoxs();
                    CargarTareasListBox();
                    listBox1.SelectedIndex = posicionLista;
                }
                else
                {
                    Camara nuevaTarea = new Camara();
                    nuevaTarea.nombre = textBox51.Text.Trim();
                    nuevaTarea.identificador = textBox52.Text.Trim();
                    nuevaTarea.codigoCheque = textBox53.Text.Trim();
                    nuevaTarea.claseInfoImage = textBox54.Text.Trim();
                    nuevaTarea.movTarea = textBox55.Text.Trim();
                    nuevaTarea.cantidadCampos = Int32.Parse(textBox56.Text.Trim());
                    tareasCampos.camaras.Add(nuevaTarea);
                    LimpiarCamposListBoxs();
                    CargarTareasListBox();
                    listBox1.SelectedIndex = listBox1.Items.Count - 1;
                }



                textBox51.ReadOnly = true;
                textBox52.ReadOnly = true;
                textBox53.ReadOnly = true;
                textBox54.ReadOnly = true;
                textBox55.ReadOnly = true;
                textBox56.ReadOnly = true;
                listBox1.Enabled = true;
                nombreBotonSec.Enabled = true;
                button15.Enabled = true;
                nombreBoton.Enabled = true;
                button23.Enabled = true;
                if (tipo == 1)
                {
                    nombreBoton.Text = "Editar Tarea";
                }
                else
                {
                    nombreBoton.Text = "Insertar Tarea";
                }
                groupBox23.Enabled = true;
                listBox1.Focus();

            }
            else
            {
                if (((listBox1.SelectedIndex != -1) && (tipo == 1))
                    || (tipo == 0))
                {
                    textBox51.ReadOnly = false;
                    textBox52.ReadOnly = false;
                    textBox53.ReadOnly = false;
                    textBox54.ReadOnly = false;
                    textBox55.ReadOnly = false;
                    textBox56.ReadOnly = false;
                    listBox1.Enabled = false;
                    nombreBotonSec.Enabled = false;
                    button15.Enabled = false;
                    nombreBoton.Enabled = true;
                    button23.Enabled = false;
                    nombreBoton.Text = "Aceptar";
                    groupBox23.Enabled = false;
                    textBox51.Focus();

                }
            }
        }

        private void button20_Click(object sender, EventArgs e)
        {
            InsertarEditarCampos(1, button20, button22);
        }

        /// <summary>
        /// Edita o inserta campos
        /// </summary>
        /// <param name="tipo">0=insertar, 1=editar</param>
        /// <param name="nombreBoton">Nombre Botón</param>
        private void InsertarEditarCampos(int tipo, Button nombreBoton, Button nombreBotonSec)
        {
            if (nombreBoton.Text.Equals("Aceptar"))
            {
                //Actualizar Datos en la Variable Global
                if (radioButton7.Checked && String.IsNullOrEmpty(textBox57.Text.Trim()))
                {
                    textBox58.Text = String.Empty;
                    textBox59.Text = String.Empty;
                    textBox60.Text = String.Empty;
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox57.Focus();
                    return;
                }
                else if (radioButton6.Checked && String.IsNullOrEmpty(textBox58.Text.Trim()))
                {
                    textBox57.Text = String.Empty;
                    textBox59.Text = String.Empty;
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox58.Focus();
                    return;
                }
                else if (radioButton3.Checked && String.IsNullOrEmpty(textBox59.Text.Trim()))
                {
                    textBox57.Text = String.Empty;
                    textBox58.Text = String.Empty;
                    textBox60.Text = String.Empty;
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox59.Focus();
                    return;
                }
                else if (radioButton6.Checked && String.IsNullOrEmpty(textBox60.Text.Trim()))
                {
                    textBox57.Text = String.Empty;
                    textBox59.Text = String.Empty;
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox60.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox67.Text.Trim()))
                {
                    MessageBox.Show("El campo 'Nombre Columna BD Cheques' no debe estar vacío.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox67.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox64.Text.Trim()))
                {
                    MessageBox.Show("El campo 'Nombre Campo Indexación InfoImage' no debe estar vacío.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox64.Focus();
                    return;
                }

                int intResConv = 0;
                Int32.TryParse(textBox57.Text.Trim(), out intResConv);
                if (radioButton7.Checked && intResConv <= 0)
                {
                    MessageBox.Show("El campo debe ser un número entero y mayor a 0.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox57.SelectAll();
                    textBox57.Focus();
                    return;
                }
                intResConv = 0;
                Int32.TryParse(textBox58.Text.Trim(), out intResConv);
                if (radioButton6.Checked && intResConv <= 0)
                {
                    MessageBox.Show("El campo debe ser un número entero y mayor a 0.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox58.SelectAll();
                    textBox58.Focus();
                    return;
                }
                intResConv = 0;
                Int32.TryParse(textBox60.Text.Trim(), out intResConv);
                if (radioButton6.Checked && intResConv <= 0)
                {
                    MessageBox.Show("El campo debe ser un número entero y mayor a 0.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox60.SelectAll();
                    textBox60.Focus();
                    return;
                }
                intResConv = 0;
                Int32.TryParse(textBox59.Text.Trim(), out intResConv);
                if (radioButton3.Checked && intResConv <= 0)
                {
                    MessageBox.Show("El campo debe ser un número entero y mayor a 0.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox59.SelectAll();
                    textBox59.Focus();
                    return;
                }

                if (tipo == 1)
                {
                    tareasCampos.camaras[listBox1.SelectedIndex].camposValidos[listBox2.SelectedIndex].nombreBaseDatos = textBox67.Text.Trim();
                    tareasCampos.camaras[listBox1.SelectedIndex].camposValidos[listBox2.SelectedIndex].nombreIIF = textBox64.Text.Trim();
                    tareasCampos.camaras[listBox1.SelectedIndex].camposValidos[listBox2.SelectedIndex].requerido = checkBox33.Checked;

                    //Colocar posicion
                    if (radioButton3.Checked)
                    {//Posicion Numero
                        tareasCampos.camaras[listBox1.SelectedIndex].camposValidos[listBox2.SelectedIndex].posicion = Int32.Parse(textBox59.Text.Trim());
                    }
                    else if (radioButton4.Checked)
                    {//Fecha Registro
                        tareasCampos.camaras[listBox1.SelectedIndex].camposValidos[listBox2.SelectedIndex].posicion = 1000;
                    }
                    else if (radioButton5.Checked)
                    {//Descripcion de Tarea
                        tareasCampos.camaras[listBox1.SelectedIndex].camposValidos[listBox2.SelectedIndex].posicion = 1002;
                    }
                    else if (radioButton7.Checked)
                    {//Valor Fijo
                        tareasCampos.camaras[listBox1.SelectedIndex].camposValidos[listBox2.SelectedIndex].posicion = Int32.Parse("1001" + textBox57.Text.Trim());
                    }
                    else if (radioButton6.Checked)
                    {//Ultimos x caracteres
                        tareasCampos.camaras[listBox1.SelectedIndex].camposValidos[listBox2.SelectedIndex].posicion =
                            double.Parse("1004" + textBox60.Text.Trim() + "1004" + textBox58.Text.Trim());
                    }
                    int posicionLista = listBox2.SelectedIndex;
                    LimpiarCamposListBoxs();
                    CargarTareasListBox();
                    listBox2.SelectedIndex = posicionLista;


                }
                else
                {
                    Field nuevoCampo = new Field();
                    nuevoCampo.nombreBaseDatos = textBox67.Text.Trim();
                    nuevoCampo.nombreIIF = textBox64.Text.Trim();
                    nuevoCampo.requerido = checkBox33.Checked;

                    //Colocar posicion
                    if (radioButton3.Checked)
                    {//Posicion Numero
                        nuevoCampo.posicion = Int32.Parse(textBox59.Text.Trim());
                    }
                    else if (radioButton4.Checked)
                    {//Fecha Registro
                        nuevoCampo.posicion = 1000;
                    }
                    else if (radioButton5.Checked)
                    {//Descripcion de Tarea
                        nuevoCampo.posicion = 1002;
                    }
                    else if (radioButton7.Checked)
                    {//Valor Fijo
                        nuevoCampo.posicion = Int32.Parse("1001" + textBox57.Text.Trim());
                    }
                    else if (radioButton6.Checked)
                    {//Ultimos x caracteres
                        nuevoCampo.posicion = double.Parse("1004" + textBox60.Text.Trim() + "1004" + textBox58.Text.Trim());
                    }
                    tareasCampos.camaras[listBox1.SelectedIndex].camposValidos.Add(nuevoCampo);
                    LimpiarCamposListBoxs();
                    CargarTareasListBox();
                    listBox2.SelectedIndex = listBox2.Items.Count - 1;
                }

                textBox67.ReadOnly = true;
                textBox64.ReadOnly = true;
                textBox58.ReadOnly = true;
                textBox59.ReadOnly = true;
                textBox60.ReadOnly = true;
                textBox57.ReadOnly = true;
                label58.Enabled = false;
                checkBox33.Enabled = false;
                radioButton3.Enabled = false;
                radioButton4.Enabled = false;
                radioButton5.Enabled = false;
                radioButton6.Enabled = false;
                radioButton7.Enabled = false;
                listBox2.Enabled = true;
                nombreBotonSec.Enabled = true;
                button21.Enabled = true;
                nombreBoton.Enabled = true;
                if (tipo == 1)
                {
                    nombreBoton.Text = "Editar Campo";
                }
                else
                {
                    nombreBoton.Text = "Insertar Campo";
                }
                groupBox25.Enabled = true;
                listBox2.Focus();

            }
            else
            {
                if (((listBox2.SelectedIndex != -1) && (tipo == 1)) 
                    || ((tipo == 0) && (listBox1.SelectedIndex != -1)))
                {

                    

                    textBox67.ReadOnly = false;
                    textBox64.ReadOnly = false;
                    textBox58.ReadOnly = false;
                    textBox59.ReadOnly = false;
                    textBox60.ReadOnly = false;
                    textBox57.ReadOnly = false;
                    label58.Enabled = true;
                    checkBox33.Enabled = true;
                    radioButton3.Enabled = true;
                    radioButton4.Enabled = true;
                    radioButton5.Enabled = true;
                    radioButton6.Enabled = true;
                    radioButton7.Enabled = true;
                    listBox2.Enabled = false;
                    nombreBotonSec.Enabled = false;
                    button21.Enabled = false;
                    nombreBoton.Enabled = true;
                    nombreBoton.Text = "Aceptar";
                    groupBox25.Enabled = false;
                    textBox67.Focus();

                }
            }
        }

        private void button12_Click(object sender, EventArgs e)
        {
            openFileDialog1.CheckFileExists = true;
            openFileDialog1.Filter = "Archivos XML (*.xml)|*.xml";
            openFileDialog1.FileName = String.Empty;
            openFileDialog1.Title = "Selección Archivo Parámetros de Tareas";
            string archivoAnterior = "";

            if (!String.IsNullOrEmpty(textBox3.Text))
            {
                openFileDialog1.FileName = textBox3.Text;
                archivoAnterior = textBox3.Text;
            }

            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                textBox3.Text =  openFileDialog1.FileName;
                textBox26.Text = openFileDialog1.FileName;
                textBox33.Text = openFileDialog1.FileName;

                try
                {
                    CargarArchivoParametros();
                    CargarTareasListBox();
                }
                catch
                {
                    MessageBox.Show("Archivo de Parámetros con Formato Erróneo. Se mantiene el archivo actual.", "Error en Archivo de Parámetros", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    if (!String.IsNullOrEmpty(archivoAnterior))
                    {
                        textBox3.Text = archivoAnterior;
                        textBox26.Text = archivoAnterior;
                        textBox33.Text = archivoAnterior;
                    }
                }

            }
            
        }

        private void button4_Click(object sender, EventArgs e)
        {
            FolderChoose(textBox21);
        }

        private void FolderChoose(TextBox resTextBox)
        {
            folderBrowserDialog1.ShowNewFolderButton = true;
            folderBrowserDialog1.Description = "Selección de Directorio";

            if (!String.IsNullOrEmpty(resTextBox.Text))
                folderBrowserDialog1.SelectedPath = resTextBox.Text;

            if (folderBrowserDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                resTextBox.Text = folderBrowserDialog1.SelectedPath;
            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            FolderChoose(textBox22);
        }

        private void button6_Click(object sender, EventArgs e)
        {
            FolderChoose(textBox23);
        }

        private void button7_Click(object sender, EventArgs e)
        {
            FolderChoose(textBox24);
        }

        private void button8_Click(object sender, EventArgs e)
        {
            FolderChoose(textBox25);
        }

        private void button18_Click(object sender, EventArgs e)
        {
            FolderChoose(textBox38);
        }

        private void button16_Click(object sender, EventArgs e)
        {
            FolderChoose(textBox36);
        }

        private void button17_Click(object sender, EventArgs e)
        {
            FolderChoose(textBox61);
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                Camara camTemp = tareasCampos.camaras[listBox1.SelectedIndex];
                CargarCamposListBox(camTemp.camposValidos);
                textBox51.Text = camTemp.nombre;
                textBox52.Text = camTemp.identificador;
                textBox53.Text = camTemp.codigoCheque;
                textBox54.Text = camTemp.claseInfoImage;
                textBox55.Text = camTemp.movTarea;
                textBox56.Text = camTemp.cantidadCampos.ToString();
            }
            catch 
            {
                LimpiarCamposListBoxs();
            }
        }

        private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                List<Field> camposL = tareasCampos.camaras[listBox1.SelectedIndex].camposValidos;
                Field fieldTemp = camposL[listBox2.SelectedIndex];
                textBox67.Text = fieldTemp.nombreBaseDatos;
                textBox64.Text = fieldTemp.nombreIIF;

                checkBox33.Checked = fieldTemp.requerido;

                textBox57.Text = String.Empty;
                textBox58.Text = String.Empty;
                textBox59.Text = String.Empty;
                textBox60.Text = String.Empty;

                //Posicion 
                string valorP = fieldTemp.posicion.ToString();
                if (valorP.Length >= 4)
                {
                    switch (valorP.Substring(0, 4))
                    {
                        case "1000"://fecha
                            {
                                radioButton4.Checked = true;
                                radioButton3.Checked = false;
                                radioButton5.Checked = false;
                                radioButton6.Checked = false;
                                radioButton7.Checked = false;
                                break;
                            }
                        case "1001": //valor estatico
                            {
                                radioButton4.Checked = false;
                                radioButton3.Checked = false;
                                radioButton5.Checked = false;
                                radioButton6.Checked = false;
                                radioButton7.Checked = true;
                                textBox57.Text = fieldTemp.posicion.ToString().Remove(0, 4);
                                break;
                            }
                        case "1002": //establecer mov_tarea desde descripcion
                            {
                                radioButton4.Checked = false;
                                radioButton3.Checked = false;
                                radioButton5.Checked = true;
                                radioButton6.Checked = false;
                                radioButton7.Checked = false;
                                break;
                            }
                        case "1004": //tomar una cantidad especifica de caracteres desde la derecha del texto
                            //1004pos1004numCaract
                            {
                                radioButton4.Checked = false;
                                radioButton3.Checked = false;
                                radioButton5.Checked = false;
                                radioButton6.Checked = true;
                                radioButton7.Checked = false;
                                valorP = valorP.Remove(0, 4);
                                valorP = valorP.Replace("1004", ";");
                                string[] espCaract = valorP.Split(';');
                                textBox58.Text = espCaract[1];
                                textBox60.Text = espCaract[0];
                                break;
                            }
                    }


                }
                else
                {
                    radioButton4.Checked = false;
                    radioButton3.Checked = true;
                    radioButton5.Checked = false;
                    radioButton6.Checked = false;
                    radioButton7.Checked = false;
                    textBox59.Text = valorP;
                }
            }
            catch
            {
                LimpiarCamposListBoxs();
            }

        }

        private void radioButton3_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton3.Checked)
                textBox59.Focus();
        }

        private void radioButton7_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton7.Checked)
                textBox57.Focus();
        }

        private void radioButton6_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton6.Checked)
                textBox58.Focus();
        }

        private void button11_Click(object sender, EventArgs e)
        {
            
                //Validación Campos de Texto
                //Validacion Campo de Archivos XML
                if (String.IsNullOrEmpty(textBox3.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(3);
                    textBox3.Focus();
                    return;
                }

                #region Cleaner
                //Cleaner
                if (String.IsNullOrEmpty(textBox73.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(2);
                    textBox73.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox72.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(2);
                    textBox72.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox71.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(2);
                    textBox71.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox66.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(2);
                    textBox66.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox61.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(2);
                    textBox61.Focus();
                    return;
                }
                //Validación Campos, formato númerico
                int intResConv = 0;
                Int32.TryParse(textBox71.Text.Trim(), out intResConv);
                if (intResConv <= 0)
                {
                    MessageBox.Show("El campo debe ser un número entero y mayor a 0.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(2);
                    textBox71.SelectAll();
                    textBox71.Focus();
                    return;
                }
                intResConv = 0;
                Int32.TryParse(textBox72.Text.Trim(), out intResConv);
                if (intResConv <= 0)
                {
                    MessageBox.Show("El campo debe ser un número entero y mayor a 0.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(2);
                    textBox72.SelectAll();
                    textBox72.Focus();
                    return;
                }
                #endregion

                #region ToDB
                //ToDB
                if (String.IsNullOrEmpty(textBox4.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox4.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox5.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox5.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox6.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox6.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox7.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox7.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox8.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox8.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox9.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox9.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox10.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox10.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox11.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox11.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox16.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox16.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox17.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox17.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox18.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox18.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox19.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox19.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox20.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox20.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox21.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox21.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox22.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox22.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox23.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox23.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox24.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox24.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox25.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox25.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox26.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox26.Focus();
                    return;
                }
                //Validación Campos, formato númerico
                intResConv = 0;
                Int32.TryParse(textBox5.Text.Trim(), out intResConv);
                if (intResConv <= 0)
                {
                    MessageBox.Show("El campo debe ser un número entero y mayor a 0.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox5.SelectAll();
                    textBox5.Focus();
                    return;
                }
                intResConv = 0;
                Int32.TryParse(textBox6.Text.Trim(), out intResConv);
                if (intResConv <= 0)
                {
                    MessageBox.Show("El campo debe ser un número entero y mayor a 0.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox6.SelectAll();
                    textBox6.Focus();
                    return;
                }
                intResConv = 0;
                Int32.TryParse(textBox7.Text.Trim(), out intResConv);
                if (intResConv <= 0)
                {
                    MessageBox.Show("El campo debe ser un número entero y mayor a 0.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox7.SelectAll();
                    textBox7.Focus();
                    return;
                }
                intResConv = 0;
                Int32.TryParse(textBox9.Text.Trim(), out intResConv);
                if (intResConv <= 0 && textBox9.Text.Trim().Length != 4)
                {
                    MessageBox.Show("El campo debe ser un número entero y mayor a 0. El tamaño del campo debe ser 4.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox9.SelectAll();
                    textBox9.Focus();
                    return;
                }
                intResConv = 0;
                Int32.TryParse(textBox10.Text.Trim(), out intResConv);
                if (intResConv <= 0 && textBox10.Text.Trim().Length != 4)
                {
                    MessageBox.Show("El campo debe ser un número entero y mayor a 0. El tamaño del campo debe ser 4.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    textBox10.SelectAll();
                    textBox10.Focus();
                    return;
                }

                if (!checkBox1.Checked && !checkBox2.Checked && !checkBox3.Checked && !checkBox4.Checked
                    && !checkBox5.Checked && !checkBox6.Checked && !checkBox7.Checked)
                {
                    MessageBox.Show("Debe elegir al menos un día.", "Error en Horario de Ejecución", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(0);
                    checkBox1.Focus();
                    return;
                }


                #endregion

                #region ToIIF
                //ToIIF
                if (String.IsNullOrEmpty(textBox50.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox50.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox49.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox49.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox48.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox48.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox47.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox47.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox46.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox46.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox45.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox45.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox44.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox44.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox43.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox43.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox32.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox32.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox31.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox31.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox30.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox30.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox29.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox29.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox34.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox34.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox35.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox35.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox37.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox37.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox28.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox28.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox38.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox38.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox36.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox36.Focus();
                    return;
                }
                else if (String.IsNullOrEmpty(textBox33.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox33.Focus();
                    return;
                }
                else if (checkBox34.Checked && String.IsNullOrEmpty(textBox12.Text.Trim()))
                {
                    MessageBox.Show("Debe especificar un valor.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox12.Focus();
                    return;
                }
                //Validación Campos, formato númerico
                intResConv = 0;
                Int32.TryParse(textBox49.Text.Trim(), out intResConv);
                if (intResConv <= 0)
                {
                    MessageBox.Show("El campo debe ser un número entero y mayor a 0.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox49.SelectAll();
                    textBox49.Focus();
                    return;
                }
                intResConv = 0;
                Int32.TryParse(textBox48.Text.Trim(), out intResConv);
                if (intResConv <= 0)
                {
                    MessageBox.Show("El campo debe ser un número entero y mayor a 0.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox48.SelectAll();
                    textBox48.Focus();
                    return;
                }
                intResConv = 0;
                Int32.TryParse(textBox47.Text.Trim(), out intResConv);
                if (intResConv <= 0)
                {
                    MessageBox.Show("El campo debe ser un número entero y mayor a 0.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox47.SelectAll();
                    textBox47.Focus();
                    return;
                }
                intResConv = 0;
                Int32.TryParse(textBox45.Text.Trim(), out intResConv);
                if (intResConv <= 0 && textBox45.Text.Trim().Length != 4)
                {
                    MessageBox.Show("El campo debe ser un número entero y mayor a 0. El tamaño del campo debe ser 4.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox45.SelectAll();
                    textBox45.Focus();
                    return;
                }
                intResConv = 0;
                Int32.TryParse(textBox44.Text.Trim(), out intResConv);
                if (intResConv <= 0 && textBox44.Text.Trim().Length != 4)
                {
                    MessageBox.Show("El campo debe ser un número entero y mayor a 0. El tamaño del campo debe ser 4.", "Error en Campo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    textBox44.SelectAll();
                    textBox44.Focus();
                    return;
                }
                if (!checkBox18.Checked && !checkBox19.Checked && !checkBox20.Checked && !checkBox21.Checked
                    && !checkBox22.Checked && !checkBox23.Checked && !checkBox24.Checked)
                {
                    MessageBox.Show("Debe elegir al menos un día.", "Error en Horario de Ejecución", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabControl1.SelectTab(1);
                    checkBox24.Focus();
                    return;
                }



                #endregion

                //Guardar Variables

            if (MessageBox.Show("Se realizará la modificación de los archivos de configuración", "Confirmación de Modificación", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
            {
                #region Cleaner
                configCleaner.AppSettings.Settings["identificacionSistema"].Value = textBox73.Text.Trim();
                configCleaner.AppSettings.Settings["tamanoMaximoBytesLogs"].Value = textBox72.Text.Trim();
                configCleaner.AppSettings.Settings["diasValidezDatosImagenes"].Value = textBox71.Text.Trim();
                configCleaner.AppSettings.Settings["eliminarArchivoData"].Value = (checkBox30.Checked) ? "True" : "False";
                configCleaner.AppSettings.Settings["eliminarImagenes"].Value = (checkBox31.Checked) ? "True" : "False";
                configCleaner.AppSettings.Settings["eliminarDeBaseDatos"].Value = (checkBox32.Checked) ? "True" : "False";

                configCleaner.AppSettings.Settings["cadenaConexionBDData"].Value = textBox66.Text.Trim();

                //Ubicacion Directorios
                configCleaner.AppSettings.Settings["ubicacionLogs"].Value = textBox61.Text.Trim();

                //CheckBoxs
                configCleaner.AppSettings.Settings["activarLogsFileSystem"].Value = (checkBox29.Checked) ? "True" : "False";
                configCleaner.AppSettings.Settings["activarMensajesInformacion"].Value = (checkBox25.Checked) ? "True" : "False";
                configCleaner.AppSettings.Settings["activarMensajesError"].Value = (checkBox28.Checked) ? "True" : "False";
                configCleaner.AppSettings.Settings["activarMensajesProceso"].Value = (checkBox27.Checked) ? "True" : "False";
                configCleaner.AppSettings.Settings["activarMensajesLog"].Value = (checkBox26.Checked) ? "True" : "False";

                configCleaner.Save(System.Configuration.ConfigurationSaveMode.Modified);
                #endregion

                #region ToDB

                configDB.AppSettings.Settings["identificacionSistema"].Value = textBox4.Text.Trim();
                configDB.AppSettings.Settings["tamanoMaximoBytesLogs"].Value = textBox5.Text.Trim();
                configDB.AppSettings.Settings["minutosRetrasoEjecucion"].Value = textBox6.Text.Trim();
                configDB.AppSettings.Settings["numeroReintentos"].Value = textBox7.Text.Trim();
                configDB.AppSettings.Settings["categoriasSinImagenes"].Value = textBox8.Text.Trim();
                configDB.AppSettings.Settings["cadenaConexionBDData"].Value = textBox11.Text.Trim();
                configDB.AppSettings.Settings["campoCategoria"].Value = textBox16.Text.Trim();
                configDB.AppSettings.Settings["campoFecha"].Value = textBox17.Text.Trim();
                configDB.AppSettings.Settings["campoDocumento"].Value = textBox18.Text.Trim();
                configDB.AppSettings.Settings["campoCliente"].Value = textBox19.Text.Trim();
                configDB.AppSettings.Settings["cadenaConexionBDIIF"].Value = textBox20.Text.Trim();

                //Ubicacion Directorios
                configDB.AppSettings.Settings["ubicacionLogs"].Value = textBox21.Text.Trim();
                configDB.AppSettings.Settings["rutaArchivosData"].Value = textBox22.Text.Trim();
                configDB.AppSettings.Settings["rutaImagenes"].Value = textBox23.Text.Trim();
                configDB.AppSettings.Settings["rutaArchivosCargados"].Value = textBox24.Text.Trim();
                configDB.AppSettings.Settings["rutaArchivosNoCargados"].Value = textBox25.Text.Trim();
                configDB.AppSettings.Settings["rutaArchivoParametros"].Value = textBox26.Text.Trim();

                //Calendario
                string scheduleT = "";
                if (checkBox1.Checked) scheduleT = scheduleT + "L,";
                if (checkBox2.Checked) scheduleT = scheduleT + "K,";
                if (checkBox3.Checked) scheduleT = scheduleT + "M,";
                if (checkBox4.Checked) scheduleT = scheduleT + "J,";
                if (checkBox5.Checked) scheduleT = scheduleT + "V,";
                if (checkBox6.Checked) scheduleT = scheduleT + "S,";
                if (checkBox7.Checked) scheduleT = scheduleT + "D,";
                if (!String.IsNullOrEmpty(scheduleT)) scheduleT = scheduleT.Remove(scheduleT.Length - 1);
                scheduleT = scheduleT + ";" + textBox9.Text.Trim() + ";" + textBox10.Text.Trim();
                configDB.AppSettings.Settings["horarioEjecucion"].Value = scheduleT;

                //CheckBoxs
                configDB.AppSettings.Settings["activarLogsFileSystem"].Value = (checkBox8.Checked) ? "True" : "False";
                configDB.AppSettings.Settings["activarMensajesInformacion"].Value = (checkBox12.Checked) ? "True" : "False";
                configDB.AppSettings.Settings["activarMensajesError"].Value = (checkBox9.Checked) ? "True" : "False";
                configDB.AppSettings.Settings["activarMensajesProceso"].Value = (checkBox10.Checked) ? "True" : "False";
                configDB.AppSettings.Settings["activarMensajesLog"].Value = (checkBox11.Checked) ? "True" : "False";

                configDB.Save(System.Configuration.ConfigurationSaveMode.Modified);
                #endregion

                #region ToIIF

                configIIF.AppSettings.Settings["identificacionSistema"].Value = textBox50.Text.Trim();
                configIIF.AppSettings.Settings["tamanoMaximoBytesLogs"].Value = textBox49.Text.Trim();
                configIIF.AppSettings.Settings["minutosRetrasoEjecucion"].Value = textBox48.Text.Trim();
                configIIF.AppSettings.Settings["numeroReintentos"].Value = textBox47.Text.Trim();
                configIIF.AppSettings.Settings["direccionesEmail"].Value = textBox46.Text.Trim();

                configIIF.AppSettings.Settings["cadenaConexionBDData"].Value = textBox43.Text.Trim();

                configIIF.AppSettings.Settings["usuarioIIF"].Value = textBox32.Text.Trim();
                configIIF.AppSettings.Settings["passwordIIF"].Value = textBox31.Text.Trim();
                configIIF.AppSettings.Settings["dominioIIF"].Value = textBox30.Text.Trim();
                configIIF.AppSettings.Settings["colaEnvioIIF"].Value = textBox29.Text.Trim();
                configIIF.AppSettings.Settings["campoCategoria"].Value = textBox34.Text.Trim();
                configIIF.AppSettings.Settings["campoNombre"].Value = textBox35.Text.Trim();
                configIIF.AppSettings.Settings["campoDescripcion"].Value = textBox37.Text.Trim();
                configIIF.AppSettings.Settings["cadenaConexionBDIIF"].Value = textBox28.Text.Trim();

                configIIF.AppSettings.Settings["enviarImagenesComoImports"].Value = (radioButton2.Checked) ? "True" : "False";

                //Ubicacion Directorios
                configIIF.AppSettings.Settings["ubicacionLogs"].Value = textBox38.Text.Trim();
                configIIF.AppSettings.Settings["rutaImagenes"].Value = textBox36.Text.Trim();
                configIIF.AppSettings.Settings["rutaArchivoParametros"].Value = textBox33.Text.Trim();

                //Calendario
                scheduleT = "";
                if (checkBox24.Checked) scheduleT = scheduleT + "L,";
                if (checkBox23.Checked) scheduleT = scheduleT + "K,";
                if (checkBox22.Checked) scheduleT = scheduleT + "M,";
                if (checkBox21.Checked) scheduleT = scheduleT + "J,";
                if (checkBox20.Checked) scheduleT = scheduleT + "V,";
                if (checkBox19.Checked) scheduleT = scheduleT + "S,";
                if (checkBox18.Checked) scheduleT = scheduleT + "D,";
                if (!String.IsNullOrEmpty(scheduleT)) scheduleT = scheduleT.Remove(scheduleT.Length - 1);
                scheduleT = scheduleT + ";" + textBox45.Text.Trim() + ";" + textBox44.Text.Trim();
                configIIF.AppSettings.Settings["horarioEjecucion"].Value = scheduleT;

                //CheckBoxs
                configIIF.AppSettings.Settings["activarLogsFileSystem"].Value = (checkBox17.Checked) ? "True" : "False";
                configIIF.AppSettings.Settings["activarMensajesInformacion"].Value = (checkBox13.Checked) ? "True" : "False";
                configIIF.AppSettings.Settings["activarMensajesError"].Value = (checkBox16.Checked) ? "True" : "False";
                configIIF.AppSettings.Settings["activarMensajesProceso"].Value = (checkBox15.Checked) ? "True" : "False";
                configIIF.AppSettings.Settings["activarMensajesLog"].Value = (checkBox14.Checked) ? "True" : "False";

                //Impersonalizacion Usuario
                configIIF.AppSettings.Settings["activarImpersonalizacionUsuarioIIF"].Value = (checkBox34.Checked) ? "True" : "False";
                configIIF.AppSettings.Settings["dominioWindows"].Value = textBox12.Text.Trim();

                configIIF.Save(System.Configuration.ConfigurationSaveMode.Modified);
                #endregion


                //Guardar Archivo XML
                BatchImporter_Fields.XmlSerializarArchivo<BatchImporter_Fields>(tareasCampos, textBox3.Text.Trim());

                toolStripStatusLabel1.Text = "Archivos de Configuración modificados correctamente";
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Se realizará el respaldo de los archivos de configuración", "Confirmación de Respaldo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
            {
                try
                {
                    //Crear Respaldos
                    System.IO.File.Copy("BatchImporterServiceToDB.exe.config", "BatchImporterServiceToDB.exe.config" + DateTime.Now.ToString("dd-MM-yyyy--HH-mm"), true);
                    System.IO.File.Copy("BatchImporterServiceToIIF.exe.config", "BatchImporterServiceToIIF.exe.config" + DateTime.Now.ToString("dd-MM-yyyy--HH-mm"), true);
                    System.IO.File.Copy("BatchImporterService_Cleaner.exe.config", "BatchImporterService_Cleaner.exe.config" + DateTime.Now.ToString("dd-MM-yyyy--HH-mm"), true);
                    System.IO.File.Copy(textBox3.Text.Trim(), textBox3.Text.Trim() + DateTime.Now.ToString("dd-MM-yyyy--HH-mm"), true);
                    toolStripStatusLabel1.Text = "Respaldo de Archivos de Configuración realizado correctamente";
                }
                catch (Exception ex)
                {
                    toolStripStatusLabel1.Text = "Error al realizar el Respaldo de Archivos de Configuración";
                    MessageBox.Show("Se produjo el siguiente incoveniente: " + ex.Message, "Error al Realizar Respaldo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    System.Environment.Exit(0);
                }
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (button1.Text.Equals("Iniciar"))
            {
                if (IniciarServicioWindows("Unisys Batch Importer To DB", milisecTO, textBox1))
                {
                    textBox1.BackColor = Color.Green;
                    textBox1.Text = "Iniciado";
                    button1.Text = "Detener";
                    toolStripStatusLabel1.Text = "Servicio Unisys Batch Importer To DB iniciado correctamente.";
                }
                else
                {
                    textBox1.BackColor = Color.Red;
                    textBox1.Text = "Detenido";
                    button1.Text = "Iniciar";
                }
            }
            else if (button1.Text.Equals("Detener"))
            {
                if (DetenerServicioWindows("Unisys Batch Importer To DB", milisecTO, textBox1))
                {
                    textBox1.BackColor = Color.Red;
                    textBox1.Text = "Detenido";
                    button1.Text = "Iniciar";
                    toolStripStatusLabel1.Text = "Servicio Unisys Batch Importer To DB detenido correctamente.";
                }
                else
                {
                    textBox1.BackColor = Color.Green;
                    textBox1.Text = "Iniciado";
                    button1.Text = "Detener";
                }
            }
            CargarEstadoServicios();

        }

        private bool IniciarServicioWindows(string nombreServicio, int milisecTimeout, TextBox nombreTextBox=null)
        {
            ServiceController servicioWindows = new ServiceController(nombreServicio);
            try
            {
                TimeSpan timeout = TimeSpan.FromMilliseconds(milisecTimeout);

                servicioWindows.Start();
                if(nombreTextBox != null)
                {
                    nombreTextBox.Text = "Iniciando";
                    nombreTextBox.BackColor = Color.Yellow;
                }
                servicioWindows.WaitForStatus(ServiceControllerStatus.Running, timeout);
                return true;
            }
            catch (Exception exc)
            {
                toolStripStatusLabel1.Text = "Error al Iniciar el servicio '" + nombreServicio + "': " + exc.Message;
                return false;
            }
        }

        private bool DetenerServicioWindows(string nombreServicio, int milisecTimeout, TextBox nombreTextBox=null)
        {
            ServiceController servicioWindows = new ServiceController(nombreServicio);
            try
            {
                TimeSpan timeout = TimeSpan.FromMilliseconds(milisecTimeout);

                servicioWindows.Stop();
                if (nombreTextBox != null)
                {
                    nombreTextBox.Text = "Deteniendo";
                    nombreTextBox.BackColor = Color.Yellow;
                }
                servicioWindows.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
                return true;
            }
            catch (Exception exc)
            {
                toolStripStatusLabel1.Text = "Error al Detener el servicio '" + nombreServicio + "': " + exc.Message;
                return false;
            }
        }

        private void AbrirDirectorio(string rutaDirectorio)
        {
            try
            {
                Process.Start("explorer.exe", rutaDirectorio.Trim());
            }
            catch { toolStripStatusLabel1.Text = "Directorio especificado con formato incorrecto."; }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (button2.Text.Equals("Iniciar"))
            {
                if (IniciarServicioWindows("Unisys Batch Importer Cleaner", milisecTO, textBox2))
                {
                    textBox2.BackColor = Color.Green;
                    textBox2.Text = "Iniciado";
                    button2.Text = "Detener";
                    toolStripStatusLabel1.Text = "Servicio Unisys Batch Importer Cleaner iniciado correctamente.";
                }
                else
                {
                    textBox2.BackColor = Color.Red;
                    textBox2.Text = "Detenido";
                    button2.Text = "Iniciar";
                }
            }
            else if (button2.Text.Equals("Detener"))
            {
                if (DetenerServicioWindows("Unisys Batch Importer Cleaner", milisecTO, textBox2))
                {
                    textBox2.BackColor = Color.Red;
                    textBox2.Text = "Detenido";
                    button2.Text = "Iniciar";
                    toolStripStatusLabel1.Text = "Servicio Unisys Batch Importer Cleaner detenido correctamente.";
                }
                else
                {
                    textBox2.BackColor = Color.Green;
                    textBox2.Text = "Iniciado";
                    button2.Text = "Detener";
                }
            }
            CargarEstadoServicios();
        }

        private void button10_Click(object sender, EventArgs e)
        {
            if (button10.Text.Equals("Iniciar"))
            {
                if (IniciarServicioWindows("Unisys Batch Importer To IIF", milisecTO, textBox27))
                {
                    textBox27.BackColor = Color.Green;
                    textBox27.Text = "Iniciado";
                    button10.Text = "Detener";
                    toolStripStatusLabel1.Text = "Servicio Unisys Batch Importer To IIF iniciado correctamente.";
                }
                else
                {
                    textBox27.BackColor = Color.Red;
                    textBox27.Text = "Detenido";
                    button10.Text = "Iniciar";
                }
            }
            else if (button10.Text.Equals("Detener"))
            {
                if (DetenerServicioWindows("Unisys Batch Importer To IIF", milisecTO, textBox27))
                {
                    textBox27.BackColor = Color.Red;
                    textBox27.Text = "Detenido";
                    button10.Text = "Iniciar";
                    toolStripStatusLabel1.Text = "Servicio Unisys Batch Importer To IIF detenido correctamente.";
                }
                else
                {
                    textBox27.BackColor = Color.Green;
                    textBox27.Text = "Iniciado";
                    button10.Text = "Detener";
                }
            }
            CargarEstadoServicios();
        }

        private void checkBox34_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox34.Checked)
            {
                textBox12.ReadOnly = false;
                textBox12.Focus();
                
            }
            else
            {
                textBox12.ReadOnly = true;
            }
        }

        private void textBox21_DoubleClick(object sender, EventArgs e)
        {
            AbrirDirectorio(textBox21.Text);
        }

        private void textBox22_DoubleClick(object sender, EventArgs e)
        {
            AbrirDirectorio(textBox22.Text);
        }

        private void textBox23_DoubleClick(object sender, EventArgs e)
        {
            AbrirDirectorio(textBox23.Text);
        }

        private void textBox24_DoubleClick(object sender, EventArgs e)
        {
            AbrirDirectorio(textBox24.Text);
        }

        private void textBox25_DoubleClick(object sender, EventArgs e)
        {
            AbrirDirectorio(textBox25.Text);
        }

        private void textBox26_DoubleClick(object sender, EventArgs e)
        {
            AbrirDirectorio(string.Format("/select,\"{0}\"", textBox26.Text.Trim()));
        }

        private void textBox38_DoubleClick(object sender, EventArgs e)
        {
            AbrirDirectorio(textBox38.Text);
        }

        private void textBox36_DoubleClick(object sender, EventArgs e)
        {
            AbrirDirectorio(textBox36.Text);
        }

        private void textBox33_DoubleClick(object sender, EventArgs e)
        {
            AbrirDirectorio(string.Format("/select,\"{0}\"", textBox33.Text.Trim()));
        }

        private void textBox61_DoubleClick(object sender, EventArgs e)
        {
            AbrirDirectorio(textBox61.Text);
        }

        private void textBox3_DoubleClick(object sender, EventArgs e)
        {
            AbrirDirectorio(string.Format("/select,\"{0}\"",textBox3.Text.Trim()));
        }

        private void button23_Click(object sender, EventArgs e)
        {
            if (listBox1.SelectedIndex != -1)
            {
                if (MessageBox.Show("Se duplicará la Tarea: " + listBox1.SelectedValue, "Confirmar Duplicación Tarea", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
                {
                    tareasCampos.camaras.Add((Camara)BatchImporter_Fields.ClonacionAnidada<Camara>(tareasCampos.camaras[listBox1.SelectedIndex]));
                    LimpiarCamposListBoxs();
                    CargarTareasListBox();

                    if (listBox1.Items.Count != 0)
                    {
                        listBox1.SelectedIndex = 0;
                        listBox1.SelectedIndex = listBox1.Items.Count - 1;
                    }
                }
            }
        }

        private void button15_Click(object sender, EventArgs e)
        {
            if (listBox1.SelectedIndex != -1)
            {
                if (MessageBox.Show("Se eliminará la Tarea: " + listBox1.SelectedValue, "Confirmar Eliminación Tarea", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
                {
                    tareasCampos.camaras.RemoveAt(listBox1.SelectedIndex);
                    LimpiarCamposListBoxs();
                    CargarTareasListBox();
                    if (listBox1.Items.Count != 0)
                    {
                        listBox1.SelectedIndex = 0;
                    }
                }
            }
        }

        private void button14_Click(object sender, EventArgs e)
        {
            InsertarEditarTareas(0, button14, button19);
        }

        private void button21_Click(object sender, EventArgs e)
        {
            if (listBox2.SelectedIndex != -1)
            {
                if (MessageBox.Show("Se eliminará el campo: "+listBox2.SelectedValue, "Confirmar Eliminación Campo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
                {
                    tareasCampos.camaras[listBox1.SelectedIndex].camposValidos.RemoveAt(listBox2.SelectedIndex);
                    LimpiarCamposListBoxs();
                    CargarTareasListBox();
                    if (listBox2.Items.Count != 0)
                    {
                        listBox2.SelectedIndex = 0;
                    }
                }
            }
        }

        private void button22_Click(object sender, EventArgs e)
        {
            InsertarEditarCampos(0, button22, button20);
        }

    }
}
